<?php

class visitaChecar extends Object{
    
    private $evento = array();
    private $visita = array();
    
    private function init($visita){
        $this->LoadModel('venda/visita', 'vis');
        $this->LoadModel('venda/evento', 'ev');
        $this->visita = $visita;
        $this->evento = $this->ev->getSimpleItem($this->visita['__venda_evento_cod'], array('venda_evento_terminodivulgacao'));
        if(empty($this->evento)) {
            $this->setErrorMessage('O Evento desta visita foi removido');
            return false;
        }
        return true;
    }

    public function checarVisita($visita){        
        if(!$this->init($visita))                   return false;
        //if($this->userHasEditPermission())          return true;
        if(!$this->removeActionIfUserNotIsOwner())  return false;
        if(!$this->removeActionIfUserNotInEquipe()) return false;
        if(!$this->removeActionsIfPrazoEsgotado())  return false;
        if(!$this->isSaved()) return true;
        $this->setAlertaTempoModificacaoDaVisita();
        return true;
    }
    
    private function userHasEditPermission(){
        //se usuário tem a permissão de editar dados antigos
        $this->LoadModel('usuario/perfil', 'perf');
        return ($this->perf->hasPermissionByName('Venda_Old_Empresa'));
    }
    
    private function removeActionIfUserNotIsOwner(){
        if($this->userIsOwner()) return true;
        switch (CURRENT_ACTION){
            case 'apagar': 
            case 'edit': 
                $this->setErrorMessage("Erro VendaVisitaChecar-1. Somente o vendedor que criou esta visita pode editá-la");
                break;
        }
        EventTube::removeItemFromMenu('body-top', 'Opções');
        return false;
    }
    
    private function userIsOwner(){
        return (usuario_loginModel::CodUsuario() == $this->visita['__cod_usuario']);
    }
    
    private function isSaved(){
        return ($this->visita['__venda_visita_bdstatus'] != 'unsaved');
    }
    
    private function removeActionIfUserNotInEquipe(){
        if($this->userInEquipe()) return true;
        $equipe = $this->visita['venda_equipe_cod'];
        $this->setAlertMessage('Você não pode editar esta visita pois foi removido da equipe <b>'.array_shift($equipe)."</b>");
        EventTube::removeItemFromMenu('body-top', 'Opções');
        EventTube::removeItemFromMenu('body-top', 'Voltar para a Empresa');
        EventTube::removeItemFromMenu('body-top', 'Voltar para a Equipe');
        return false;
    }
    
    private function userInEquipe(){
        $this->LoadModel('venda/equipe', 'eq');
        $cod_user_equipe = $this->eq->getCodEquipeOfUser();
        return($cod_user_equipe == $this->visita['__venda_equipe_cod']);
    }
    
    private function removeActionsIfPrazoEsgotado(){
        
        //se existe um retorno agendado para a visita, verifica se ele ainda não passou
        if($this->visita['venda_visita_agendada'] != ""){
            $retagendado = timeResource::addDayIntoDate($this->visita['venda_visita_agendada'], 1);
            $diff = timeResource::diffDate($retagendado, '', 'h');
            if($diff < 0) return true;
        }
        
        //se o prazo de 24 horas não se esgotou
        if(!timeResource::diffDate($this->visita['venda_visita_criado'], '', 'h') <= 24){
            
            //se o prazo para divulgar o evento ainda não acabou, retorna
            if($this->checkTerminoDivulgacaoEvento()) 
                return true;
        }
        
        //se a visita não está salva e já se passaram 24 horas, apaga a visita
        if($this->visita['__venda_visita_bdstatus'] == 'unsaved'){
            $this->vis->apagar($this->visita['venda_visita_cod']);
            Redirect('venda/equipe/show');
        }

        //se o prazo se esgotou
        EventTube::removeItemFromMenu('body-top', 'Opções');
        $this->setErrorMessage('O prazo para modificar esta visita está esgotado');
        return false;
    }
    
    private function setAlertaTempoModificacaoDaVisita(){
        $prazomax    = timeResource::addDayIntoDate($this->visita['venda_visita_criado'], 1);
        $terminoev   = $this->evento['venda_evento_terminodivulgacao'];
        $retagendado = timeResource::addDayIntoDate($this->visita['venda_visita_agendada'], 1);
        if($retagendado != ""){
            $prazomax = (timeResource::diffDate($retagendado, $prazomax) < 0)?$retagendado:$prazomax;
        }
        
        $diff = timeResource::diffDate($terminoev, $prazomax);
        $date = ($diff > 0)?$terminoev:$prazomax;
        
        $data = timeResource::Date2StrBr($date);
        $data = str_replace(array("Dentro de", "Amanhã"), array("por mais", "até Amanhã"), $data);
        $this->setAlertMessage("Esta visita só poderá ser modificada até <b>$data</b>");
        return true;
    }
    
    private function checkTerminoDivulgacaoEvento(){
        $termino = $this->evento['venda_evento_terminodivulgacao'];
        $prazo_evento = timeResource::diffDate($termino, "", "MI");
        return($prazo_evento < 0);
    }

}

?>